package core.descriptors;

import core.enums.WorkerStatus;
import core.util.COREServiceRegistry;
import core.worker.Address;
import org.apache.log4j.Logger;

/**
 * La classe WorkerDescriptor viene utilizzata per "descrivere" un Worker.
 * Contiene le informazioni fondamentali del Worker: Indirizzo e Stato
 * @author Vincenzo Merlo, Scuderi Giovanni Luca, Paolo Giuffrida
 *
 */
public class WorkerDescriptor {

    private final Logger logger = COREServiceRegistry.getLogger(WorkerDescriptor.class.toString());
    private Address addr;
    private WorkerStatus status;

    /**
     * Costruttore: setta di default l'indirizzo a null e lo stato a free
     */
    public WorkerDescriptor() {
        logger.trace("WorkerDescriptor");
        addr = null;
        status = WorkerStatus.Free;
    }

    /**
     * Ritorna l'indirizzo del Worker
     * @return indirizzo del Worker
     */
    public Address getAddr() {
        logger.trace("getAddr");
        return addr;
    }

    /**
     * Setta l'indirizzo del Worker
     * @param addr - indirizzo del Worker da settare
     */
    public void setAddr(Address addr) {
        logger.trace("setAddr");
        this.addr = addr;
    }

    /**
     * Ritorna lo stato (free o working) del Worker
     * @return stato del Worker
     */
    public WorkerStatus getStatus() {
        logger.trace("getStatus");
        return status;
    }

    /**
     * Setta lo stato del Worker (free - working)
     * @param status del Worker da settare
     */
    public void setStatus(WorkerStatus status) {
        logger.trace("setStatus");
        this.status = status;
    }

    /**
     *
     * @return string
     */
    @Override
    public String toString() {
    	StringBuilder sb = new StringBuilder(WorkerDescriptor.class.getSimpleName());
    	sb.append("\n\tAddress: ").append(this.getAddr())
    		.append("\n\tWorkerStatus: ").append(this.getStatus());

    	return sb.toString();
    }
}
